package com.ntd.study.protocol.mqtt;

/**
 * mqtt 协议学习
 * 发布者（Publish）、代理（Broker）（服务器）、订阅者（Subscribe）
 * MQTT传输的消息分为：主题（Topic）和负载（payload）两部分
 * （1）Topic，可以理解为消息的类型，订阅者订阅（Subscribe）后，就会收到该主题的消息内容（payload）；
 * （2）payload，可以理解为消息的内容，是指订阅者具体要使用的内容。
 * MQTT会构建底层网络传输：它将建立客户端到服务器的连接，提供两者之间的一个有序的、无损的、基于字节流的双向传输。
 * 当应用数据通过MQTT网络发送时，MQTT会把与之相关的服务质量（QoS）和主题名（Topic）相关连
 * 客户端:
 * （1）发布其他客户端可能会订阅的信息；
 * （2）订阅其它客户端发布的消息；
 * （3）退订或删除应用程序的消息；
 * （4）断开与服务器连接。
 * MQTT服务器以称为"消息代理"（Broker）:
 * （1）接受来自客户的网络连接；
 * （2）接受客户发布的应用信息；
 * （3）处理来自客户端的订阅和退订请求；
 * （4）向订阅的客户转发应用程序消息。
 * <p>
 * 一、订阅（Subscription）
 * 订阅包含主题筛选器（Topic Filter）和最大服务质量（QoS）。订阅会与一个会话（Session）关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。
 * 二、会话（Session）
 * 每个客户端与服务器建立连接后就是一个会话，客户端和服务器之间有状态交互。会话存在于一个网络之间，也可能在客户端和服务器之间跨越多个连续的网络连接
 * 三、主题名（Topic Name）
 * 连接到一个应用程序消息的标签，该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。
 * 四、主题筛选器（Topic Filter）
 * 一个对主题名通配符筛选器，在订阅表达式中使用，表示订阅所匹配到的多个主题。
 * 五、负载（Payload）
 * 消息订阅者所具体接收的内容。
 * <p>
 * 一个MQTT数据包由：固定头（Fixed header）、可变头（Variable header）、消息体（payload）三部分构成
 * （1）固定头（Fixed header）。存在于所有MQTT数据包中，表示数据包类型及数据包的分组类标识。
 * （2）可变头（Variable header）。存在于部分MQTT数据包中，数据包类型决定了可变头是否存在及其具体内容。
 * （3）消息体（Payload）。存在于部分MQTT数据包中，表示客户端收到的具体内容。
 * <p>
 * Payload消息体
 * （1）CONNECT，消息体内容主要是：客户端的ClientID、订阅的Topic、Message以及用户名和密码。
 * （2）SUBSCRIBE，消息体内容是一系列的要订阅的主题以及QoS。
 * （3）SUBACK，消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。
 * （4）UNSUBSCRIBE，消息体内容是要订阅的主题。
 */
public class MqttProtocol {
}
